package com.hoongs.v1.entity;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.hoongs.v1.utils.DateUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Repository;

import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Repository
@TableName(value = "orders")
@JsonIgnoreProperties(value = {"createTime", "updateTime"})
public class Order {

    @TableId(type = IdType.ASSIGN_UUID)
    private String id;

    @TableField(value = "order_code")
    private String orderCode;

    @TableField(value = "order_num")
    private BigDecimal orderNum;

    private String status = "0";         // 订单状态 0:未开始 1:进行中 2:已完成 3 已取消

    @TableField(value = "total_num")
    private BigDecimal totalNum;         // 订单商品总数

    @TableField(value = "total_amount")
    private BigDecimal totalAmount;         // 订单总金额

    @NotBlank(message = "下单用户信息不能为空")
    @TableField(value = "user_id")
    private String userId;      // 下单用户id

    @NotBlank(message = "下单用户名称不能为空")
    @TableField(value = "user_name")
    private String userName;      // 下单用户名称

    @NotBlank(message = "下单用户联系方式不能为空")
    @TableField(value = "user_mobile")
    private String userMobile;      // 下单用户联系方式

    @NotBlank(message = "下单用户地址不能为空")
    @TableField(value = "user_address")
    private String userAddress;      // 下单用户地址

    @TableField(value = "rider_id")
    private String riderId;      // 骑手id

    @TableField(value = "rider_name")
    private String riderName;      // 骑手名称

    @TableField(value = "rider_mobile")
    private String riderMobile;      // 骑手联系方式

    @JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
    private LocalDateTime orderTime;       // 下单时间

    @JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
    private LocalDateTime sendTime;       // 期望送达时间

    @TableField(value = "done_time")
    private LocalDateTime doneTime;       // 完成时间

    private String iscancel = "0";         // 是否申请取消，1:已申请

    @NotBlank(message = "请选择支付状态")
    private String ispaid = "0";         // 支付状态 1:已支付 0:未支付

    @NotBlank(message = "请选择支付方式")
    private String paymode;         // 支付方式 1:线下支付 2:在线支付

    @NotBlank(message = "请选择配送方式")
    private String sendmode;         // 支付方式 1:店内用餐 2:店铺配送

    private String wx_order_id;         // 微信支付订单号

    private String remark;         // 订单备注

    @JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;       // 发布时间

    @JsonFormat(pattern = DateUtil.PATTERN_DATETIME)
    @DateTimeFormat(pattern = DateUtil.PATTERN_DATETIME)
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;    // 更新时间
}
